package design.pattern.singleton.demo7;

/**
 * 懒汉式，静态内部类方式。另外添加了防止通过反射机制破坏单例模式的readResolve方法
 *
 * @author AtoVio, Winter Yuan
 */
public class Singleton {

    private Singleton() {
    }

    // 定义一个静态内部类
    private static class SingletonHolder {
        // 在内部类中声明并初始化外部类的对象
        private static final Singleton INSTANCE = new Singleton();
    }

    // 提供公共的访问方法
    public static Singleton getInstance() {
        return SingletonHolder.INSTANCE;
    }

    // 当进行反序列化时，会调用此方法，返回实例对象而不是new一个对象，以此来防止单例模式被破坏
    public Singleton readResolve() {
        return SingletonHolder.INSTANCE;
    }
}
